use QDebug in logging. (#438)
authortsteven4 <13596209+tsteven4@users.noreply.github.com>
Tue, 17 Dec 2019 21:39:48 +0000 (14:39 -0700)
committerGitHub <noreply@github.com>
Tue, 17 Dec 2019 21:39:48 +0000 (14:39 -0700)
* use QDebug in logging.

This gives us full access to all the methods, stream operators and
manipulators that QDebug has access to.

* silence warning on unhandled fix values in nmea.

nmea.cc
src/core/logging.h

diff --git a/nmea.cc b/nmea.cc
index 63c4db61d5cc830e8c8dc9ece4db4a7bcbfb19e7..506508a0354c37a4dba55c59a9742d261a077e58 100644 (file)
--- a/nmea.cc
+++ b/nmea.cc
@@ -547,7 +547,7 @@ gpgga_parse(char* ibuf)
       waypt->fix = fix_pps;
       break;
     default:
-      Warning() << MYNAME << ": unknown vix value" << fix;
+      break;
   }
 
   nmea_release_wpt(curr_waypt);
@@ -963,7 +963,7 @@ nmea_parse_one_line(char* ibuf)
     int ckcmp;
     sscanf(ck, "%2X", &ckcmp);
     if (ckval != ckcmp) {
-      Warning() << "Invalid NMEA checksum. Computed " << ckval << " but found " << ckcmp << ". Ignoring sentence";
+      Warning().nospace() <<  hex << "Invalid NMEA checksum.  Computed 0x" << ckval << " but found 0x" << ckcmp << ".  Ignoring sentence.";
       return;
     }
 
index ffa34637f8491f197b2a749337fac7b5d1d5fa7a..73a58ac332c63e2874b9db80c44ac92b1ef13419 100644 (file)
 #ifndef gpsbabel_logging_h_included
 #define gpsbabel_logging_h_included
 
-// A wrapper for QTextStream that provides a sensible Warning() and Fatal()
-// with convenient stream operators.
+// A wrapper for QDebug that provides a sensible Warning() and Fatal()
+// with convenient functions, stream operators and manipulators.
 
-#include <QtCore/QTextStream>
-#include <QtCore/QFile>
-#include <cstdlib> //exit()
+#include <QtCore/QDebug>       // for QDebug
+#include <QtCore/QFile>        // for QFile
+#include <QtCore/QIODevice>    // for QIODevice, QIODevice::WriteOnly
+#include <QtCore/QString>      // for QString
+#include <QtCore/QTextStream>  // for QTextStream
+#include <cstdio>              // for stderr
+#include <cstdlib>             // for exit
 
-class Warning {
- public:
-    explicit Warning(bool fatal = false) :
-   fatal_(fatal) {
-    file_.open(stderr, QIODevice::WriteOnly);
-    fileStream_.setDevice(&file_);
+
+class Warning : public QDebug {
+public:
+  explicit Warning(bool fatal = false) : QDebug(&msg_), fatal_(fatal) {
   }
   ~Warning() {
-    fileStream_ << '\n';
+    QFile file;
+    file.open(stderr, QIODevice::WriteOnly);
+    QTextStream fileStream(&file);
+    fileStream << msg_ << '\n';
+    file.close();
     if (fatal_) {
-      fileStream_.flush();
       exit(1);
     }
   }
-  inline Warning& operator << (char d) { fileStream_ << d; return optionalSpace(); }
-  inline Warning& operator << (signed short d) { fileStream_ << d; return optionalSpace(); }
-  inline Warning& operator << (unsigned short d) { fileStream_ << d; return optionalSpace(); }
-  inline Warning& operator << (signed int d) { fileStream_ << d; return optionalSpace(); }
-  inline Warning& operator << (unsigned int d) { fileStream_ << d; return optionalSpace(); }
-  inline Warning& operator << (signed long d) { fileStream_ << d; return optionalSpace(); }
-  inline Warning& operator << (unsigned long d) { fileStream_ << d; return optionalSpace(); }
-  inline Warning& operator << (qint64 d) { fileStream_ << d; return optionalSpace(); }
-  inline Warning& operator << (quint64 d) { fileStream_ << d; return optionalSpace(); }
-  inline Warning& operator << (float d) { fileStream_ << d; return optionalSpace(); }
-  inline Warning& operator << (double d) { fileStream_ << d; return optionalSpace(); }
-  inline Warning& operator << (const char* d) { fileStream_ << QString::fromUtf8(d); return optionalSpace(); }
-  inline Warning& operator << (const QString& d) { fileStream_ << '\"' << d << '\"'; return optionalSpace(); }
-  inline Warning& operator << (const void* d) { fileStream_ << '\"' << d << '\"'; return optionalSpace(); }
-
-  inline Warning& optionalSpace() {
-    fileStream_ << ' ';
-    return *this;
-  }
 private:
-  QFile file_;
-  QTextStream fileStream_;
+  QString msg_;
   bool fatal_;
 };